"""
Google Test (gtest) 模块

提供 gtest 框架的 Python 实现，用于 IDE 类型检查和 MCPy 编译器。

@mcpy_headers: <gtest/gtest.h>
@mcpy_module: gtest
"""

# 用户API - 装饰器
from .decorators import test, fixture, test_f

# 用户API - 断言函数
from .assertions import (
    ASSERT_TRUE,
    ASSERT_FALSE,
    ASSERT_EQ,
    ASSERT_NE,
    ASSERT_LT,
    ASSERT_LE,
    ASSERT_GT,
    ASSERT_GE,
    EXPECT_TRUE,
    EXPECT_FALSE,
    EXPECT_EQ,
    EXPECT_NE,
    EXPECT_LT,
    EXPECT_LE,
    EXPECT_GT,
    EXPECT_GE,
    ASSERT_STREQ,
    ASSERT_STRNE,
    ASSERT_STRCASEEQ,
    ASSERT_STRCASENE,
    EXPECT_STREQ,
    EXPECT_STRNE,
    EXPECT_STRCASEEQ,
    EXPECT_STRCASENE,
    ASSERT_FLOAT_EQ,
    ASSERT_DOUBLE_EQ,
    ASSERT_NEAR,
    EXPECT_FLOAT_EQ,
    EXPECT_DOUBLE_EQ,
    EXPECT_NEAR,
    ASSERT_THROW,
    EXPECT_THROW,
)


# 用户API - 测试框架函数
def RUN_ALL_TESTS() -> int:
    return 0


# 注意：编译器扩展现在通过 _mcpy 子模块处理，不在此处导入

__all__ = [
    # 装饰器
    "test",
    "fixture",
    "test_f",
    # 致命断言
    "ASSERT_TRUE",
    "ASSERT_FALSE",
    "ASSERT_EQ",
    "ASSERT_NE",
    "ASSERT_LT",
    "ASSERT_LE",
    "ASSERT_GT",
    "ASSERT_GE",
    # 非致命断言
    "EXPECT_TRUE",
    "EXPECT_FALSE",
    "EXPECT_EQ",
    "EXPECT_NE",
    "EXPECT_LT",
    "EXPECT_LE",
    "EXPECT_GT",
    "EXPECT_GE",
    # 字符串断言
    "ASSERT_STREQ",
    "ASSERT_STRNE",
    "ASSERT_STRCASEEQ",
    "ASSERT_STRCASENE",
    "EXPECT_STREQ",
    "EXPECT_STRNE",
    "EXPECT_STRCASEEQ",
    "EXPECT_STRCASENE",
    # 浮点数断言
    "ASSERT_FLOAT_EQ",
    "ASSERT_DOUBLE_EQ",
    "ASSERT_NEAR",
    "EXPECT_FLOAT_EQ",
    "EXPECT_DOUBLE_EQ",
    "EXPECT_NEAR",
    # 异常断言
    "ASSERT_THROW",
    "EXPECT_THROW",
    # 框架函数
    "RUN_ALL_TESTS",
]
